﻿' LibWowArmory
' by Ronald M. Clifford (roncli@roncli.com)
'
' This source code is released under the GNU Library General Public License (LGPL) Version 2.1.

Imports System.Collections.ObjectModel
Imports roncliProductions.LibWowArmory.Data
Imports roncliProductions.LibWowArmory.Enums

Namespace roncliProductions.LibWowArmory.Character

    ''' <summary>
    ''' A class containing information about a character.
    ''' </summary>
    ''' <remarks></remarks>
    Public Class Character

        ''' <summary>
        ''' The date the character was last modified at the server.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property LastModified As Date

        ''' <summary>
        ''' The character's name.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Name As String

        ''' <summary>
        ''' The realm the character resides on.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Realm As String

        ''' <summary>
        ''' The character's class.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property [Class] As CharacterClass

        ''' <summary>
        ''' The character's race.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Race As Race

        ''' <summary>
        ''' The character's gender.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Gender As Gender

        ''' <summary>
        ''' The character's level.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Level As Integer

        ''' <summary>
        ''' The number of achievement points the character has.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AchievementPoints As Integer

        ''' <summary>
        ''' A path to an image thumbnail of the character on the server.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Thumbnail As String

        ''' <summary>
        ''' The character's guild.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Guild As Guild

        ''' <summary>
        ''' The character's equipped items.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Items As Items

        ''' <summary>
        ''' The character's combat statistics.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Stats As Stats

        ''' <summary>
        ''' The character's professions.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Professions As Professions

        Private colReputation As Collection(Of Reputation)
        ''' <summary>
        ''' A list of the character's reputations.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Reputation As Collection(Of Reputation)
            Get
                Return colReputation
            End Get
        End Property

        Private colTitles As Collection(Of Title)
        ''' <summary>
        ''' A list of titles the character has earned.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Titles As Collection(Of Title)
            Get
                Return colTitles
            End Get
        End Property

        ''' <summary>
        ''' The character's completed achievements and achievement criteria.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Achievements As Achievements

        Private colPets As Collection(Of Pet)
        ''' <summary>
        ''' A list of the character's combat pets.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Pets As Collection(Of Pet)
            Get
                Return colPets
            End Get
        End Property

        Private colTalents As Collection(Of Talent)
        ''' <summary>
        ''' The character's talents and glyphs.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Talents As Collection(Of Talent)
            Get
                Return colTalents
            End Get
        End Property

        ''' <summary>
        ''' The character's appearance.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Appearance As Appearance

        Private colMounts As Collection(Of Integer)
        ''' <summary>
        ''' A list of the character's mounts.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Mounts As Collection(Of Integer)
            Get
                Return colMounts
            End Get
        End Property

        Private colCompanions As Collection(Of Integer)
        ''' <summary>
        ''' A list of the character's companion pets.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Companions As Collection(Of Integer)
            Get
                Return colCompanions
            End Get
        End Property

        ''' <summary>
        ''' The character's instance progression.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Progression As Progression

        Protected Friend Sub New(dtLastModified As Date, strName As String, strRealm As String, cClass As CharacterClass, rRace As Race, gGender As Gender, intLevel As Integer, intAchievementPoints As Integer, strThumbnail As String, gGuild As Guild, iItems As Items, sStats As Stats, pProfessions As Professions, rReputation As Collection(Of Reputation), tTitles As Collection(Of Title), aAchievements As Achievements, pPets As Collection(Of Pet), tTalents As Collection(Of Talent), aAppearance As Appearance, intMounts As Collection(Of Integer), intCompanions As Collection(Of Integer), pProgression As Progression)
            LastModified = dtLastModified
            Name = strName
            Realm = strRealm
            [Class] = cClass
            Race = rRace
            Gender = gGender
            Level = intLevel
            AchievementPoints = intAchievementPoints
            Thumbnail = strThumbnail
            Guild = gGuild
            Items = iItems
            Stats = sStats
            Professions = pProfessions
            colReputation = rReputation
            colTitles = tTitles
            Achievements = aAchievements
            colPets = pPets
            colTalents = tTalents
            Appearance = aAppearance
            colMounts = intMounts
            colCompanions = intCompanions
            Progression = pProgression
        End Sub

    End Class

End Namespace
